PostgreSQL: объединение результатов двух запросов по ключевым полям
Задача: есть две таблицы, из которых получаются данные сгруппированные по городу и населенному пункту. Необходимо их объединить в один результирующий запрос
Решение: оказывается вполне возможно объединить две выборки посредством LEFT/INNER JOIN. Если схематично, то примерно так:
select
s1.cnt_all,s2.cnt_no,s1.city,s1.settler
from (select * from aaa) as s1
inner join ((select * from bbb) as s2) on (s1.city=s2.city and s1.settler=s2.settler)
Ну или мой результирующий:
select
s1.cnt_all,
case when s2.cnt_pilot is null then 0 else s2.cnt_pilot end as cnt_pilot,
s1.city,
s1.settler
from (
SELECT
count(posting_addresses.id) as cnt_all,
ls_addresses.city,
ls_addresses.settler
FROM posting_addresses
inner join ls_addresses on ls_addresses.ls=posting_addresses.ls and ls_addresses.address_type=1
inner join divisions on divisions.area=ls_addresses.area and divisions.id=12
where posting_addresses.period='2026-01-01'
group by
ls_addresses.city,
ls_addresses.settler
order by cnt_all desc
) as s1
left join (
SELECT
count(refusals.id) as cnt_pilot,
ls_addresses.city,
ls_addresses.settler
FROM refusals
inner join ls_addresses on ls_addresses.ls=refusals.ls and ls_addresses.address_type=1
inner join divisions on divisions.area=ls_addresses.area and divisions.id=12
where refusals.dt ='2026-01-01'
group by
ls_addresses.city,
ls_addresses.settler
order by cnt_pilot desc
) as s2 on (s1.city=s2.city and s1.settler=s2.settler)
